From: Sjoerd Simons Date: Mon, 17 Oct 2016 19:39:38 +0000 (+0200) Subject: pull: Add per-remote cookie jar X-Git-Tag: archive/raspbian/2022.1-3+rpi1~1^2~4^2~44^2~9 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=96356aa1927b68ff6f887cd93c6dd67a18fc3063;p=ostree.git pull: Add per-remote cookie jar Optionally read cookie jars for a remote to be used when downloading data. This can be used for private repositories which require specific cookies to be present, e.g. repositories hosted on Amazon cloudfront using signed cookies. Closes: #531 Approved by: cgwalters --- diff --git a/src/libostree/ostree-fetcher.c b/src/libostree/ostree-fetcher.c index 21526813..a4d46016 100644 --- a/src/libostree/ostree-fetcher.c +++ b/src/libostree/ostree-fetcher.c @@ -326,6 +326,16 @@ session_thread_set_proxy_cb (ThreadClosure *thread_closure, } } +static void +session_thread_set_cookie_jar_cb (ThreadClosure *thread_closure, + gpointer data) +{ + SoupCookieJar *jar = data; + + soup_session_add_feature (thread_closure->session, + SOUP_SESSION_FEATURE (jar)); +} + #ifdef HAVE_LIBSOUP_CLIENT_CERTS static void session_thread_set_tls_interaction_cb (ThreadClosure *thread_closure, @@ -746,6 +756,23 @@ _ostree_fetcher_set_proxy (OstreeFetcher *self, } } +void +_ostree_fetcher_set_cookie_jar (OstreeFetcher *self, + const char *jar_path) +{ + SoupCookieJar *jar; + + g_return_if_fail (OSTREE_IS_FETCHER (self)); + g_return_if_fail (jar_path != NULL); + + jar = soup_cookie_jar_text_new (jar_path, TRUE); + + session_thread_idle_add (self->thread_closure, + session_thread_set_cookie_jar_cb, + jar, /* takes ownership */ + (GDestroyNotify) g_object_unref); +} + void _ostree_fetcher_set_client_cert (OstreeFetcher *self, GTlsCertificate *cert) diff --git a/src/libostree/ostree-fetcher.h b/src/libostree/ostree-fetcher.h index 8cceca51..ae20edaa 100644 --- a/src/libostree/ostree-fetcher.h +++ b/src/libostree/ostree-fetcher.h @@ -59,6 +59,9 @@ OstreeFetcher *_ostree_fetcher_new (int tmpdir_dfd, int _ostree_fetcher_get_dfd (OstreeFetcher *fetcher); +void _ostree_fetcher_set_cookie_jar (OstreeFetcher *self, + const char *jar_path); + void _ostree_fetcher_set_proxy (OstreeFetcher *fetcher, const char *proxy); diff --git a/src/libostree/ostree-repo-pull.c b/src/libostree/ostree-repo-pull.c index 1f57b133..8facf8cb 100644 --- a/src/libostree/ostree-repo-pull.c +++ b/src/libostree/ostree-repo-pull.c @@ -1964,6 +1964,19 @@ _ostree_repo_remote_new_fetcher (OstreeRepo *self, _ostree_fetcher_set_proxy (fetcher, http_proxy); } + { + g_autofree char *jar_path = NULL; + g_autofree char *cookie_file = g_strdup_printf ("%s.cookies.txt", + remote_name); + + jar_path = g_build_filename (g_file_get_path (self->repodir), cookie_file, + NULL); + + if (g_file_test(jar_path, G_FILE_TEST_IS_REGULAR)) + _ostree_fetcher_set_cookie_jar (fetcher, jar_path); + + } + success = TRUE; out: